package com.cby.library.widget

import android.content.Context
import android.graphics.drawable.Drawable
import com.cby.library.widget.alpha.AlphaButton
import com.cby.library.widget.R
import com.cby.library.widget.drawable.RoundDrawable
import android.os.Build
import android.util.AttributeSet

/**
 * 使按钮能方便地指定圆角、边框颜色、边框粗细、背景色
 *
 *
 * 注意: 因为该控件的圆角采用 View 的 background 实现, 所以与原生的 `android:background` 有冲突。
 *
 *  * 如果在 xml 中用 `android:background` 指定 background, 该 background 不会生效。
 *  * 如果在该 View 构造完后用 [.setBackgroundResource] 等方法设置背景, 该背景将覆盖圆角效果。
 *
 *
 *
 *
 * 如需在 xml 中指定圆角、边框颜色、边框粗细、背景色等值,采用 xml 属性 [TintButton]
 *
 *
 *
 * 如需在 Java 中指定以上属性, 需要通过 [.getBackground] 获取 [RoundDrawable] 对象,
 * 然后使用 [RoundDrawable] 提供的方法进行设置。
 *
 * @see RoundDrawable
 */
class TintButton : AlphaButton {
    constructor(context: Context) : super(context) {
        init(context, null, 0)
    }

    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
        init(context, attrs, R.attr.ButtonStyle)
    }

    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        init(context, attrs, R.attr.ButtonStyle)
    }

    private fun init(context: Context, attrs: AttributeSet?, defStyleAttr: Int) {
        val bg = RoundDrawable.fromAttributeSet(context, attrs, defStyleAttr)
        this.setBackgroundKeepingPadding(bg)
        setChangeAlphaWhenDisable(false)
        setChangeAlphaWhenPress(isClickable)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //默认去掉阴影
            stateListAnimator = null
        }
    }


    private fun setBackgroundKeepingPadding(drawable: Drawable) {
        val padding = intArrayOf(
            paddingLeft, paddingTop, paddingRight,
            paddingBottom
        )
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            background = drawable
        } else {
            setBackgroundDrawable(drawable)
        }
        setPadding(padding[0], padding[1], padding[2], padding[3])
    }
}